/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.common;

import entity.DettaglioPrezzo;
import entity.Marchio;
import entity.Prodotto;
import facade.DettaglioPrezzoFacade;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Antonio
 */
@Stateless
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class DettaglioPrezzoManager implements DettaglioPrezzoManagerLocal {

    @EJB
    private DettaglioPrezzoFacade dettaglioPrezzoFacade;
    @PersistenceContext(unitName = "E-Market-ejbPU")
    private EntityManager em;
//    private DettaglioPrezzo dettaglioPrezzo;

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    @Override
    public boolean inserisciDettaglio(DettaglioPrezzo dettaglioPrezzo) {

        if (dettaglioPrezzo == null) {
            throw new NullPointerException();
        }

        dettaglioPrezzoFacade.create(dettaglioPrezzo);

        return true;
    }// inserisciDettaglio

    @Override
    public boolean rimuoviDettaglio(DettaglioPrezzo dettaglioPrezzo) {

        if (dettaglioPrezzo == null) {
            throw new NullPointerException();
        }

        dettaglioPrezzoFacade.remove(dettaglioPrezzo);

        return true;
    }// rimuoviDettaglio

    @Override
    public boolean aggiornaDettaglio(DettaglioPrezzo dettaglioPrezzo) {

        if (dettaglioPrezzo == null) {
            throw new NullPointerException();
        }

        dettaglioPrezzoFacade.edit(dettaglioPrezzo);

        return true;
    }// aggiornaDettaglio

    public void persist(Object object) {
        em.persist(object);
    }

    @Override
    public List<DettaglioPrezzo> ottieniDaNegozio(Long negozioId) {

        if (negozioId == null) {
            throw new NullPointerException();
        }

        Query q = em.createNamedQuery("dettaglioPrezzo.cercaDaNegozio");
        q.setParameter(1, negozioId);

        return q.getResultList();
    }// ottieniDaNegozio

    @Override
    public List<DettaglioPrezzo> ottieniDaProdotto(Long codiceBarre) {

        if (codiceBarre == null) {
            throw new NullPointerException();
        }

        Query q = em.createNamedQuery("dettaglioPrezzo.cercaDaProdotto");
        q.setParameter(1, codiceBarre);

        return q.getResultList();
    }// ottieniDaProdotto

    @Override
    public List<Marchio> marchiNonInVendita(Long negozioId) {

        if (negozioId == null) {
            throw new NullPointerException();
        }


        Query q = em.createNativeQuery(NativeQuery.NativeQuery.MARCHI_PRODOTTI_NON_INVENDITA, Marchio.class);
        q.setParameter(1, negozioId);

        return q.getResultList();
    }// marchiNonInVendita

    @Override
    public List<Prodotto> prodottiNonInVendita(Long negozioId) {

        if (negozioId == null) {
            throw new NullPointerException();
        }

        Query q = em.createNamedQuery("dettaglioPrezzo.prodottiNonInVendita");
        q.setParameter(1, negozioId);

        return q.getResultList();
    }// prodottiNonInVendita

    @Override
    public List<Prodotto> prodottiMarchioNonInVendita(Long marchioId, Long negozioId) {

        if (negozioId == null || marchioId == null) {
            throw new NullPointerException();
        }

        Query q = em.createNamedQuery("dettaglioPrezzo.prodottiMarchioNonInVendita");
        q.setParameter(1, marchioId);
        q.setParameter(2, negozioId);

        return q.getResultList();
    }// prodottiMarchioNonInVendita

    @Override
    public List<Marchio> marchiProdottiInVendita(Long idNegozio) {

        if (idNegozio == null) {

            throw new NullPointerException();
        }

        Query q = em.createNamedQuery("dettaglioPrezzo.marchiProdottiInVendita");
        q.setParameter(1, idNegozio);

        return q.getResultList();
    }// marchiProdottiInVendita

    @Override
    public List<Prodotto> prodottiInVendita(Long idMarchio, Long idNegozio) {

        if (idMarchio == null || idNegozio == null) {

            throw new NullPointerException();
        }

        Query q = em.createNamedQuery("dettaglioPrezzo.prodottiMarchioInVendita");
        q.setParameter(1, idMarchio);
        q.setParameter(2, idNegozio);

        return q.getResultList();
    }// prodottiNonInVendita

    @Override
    public float prezzoProdotto(Long idNegozio, Long idProdotto) {

        if (idNegozio == null || idProdotto == null) {

            throw new NullPointerException();
        }

        Query q = em.createNamedQuery("dettaglioPrezzo.prezzoDaProdottoNegozio");
        q.setParameter(1, idNegozio);
        q.setParameter(2, idProdotto);

        if (q.getResultList().isEmpty()) {
            return 0;
        }

        return (Float) q.getSingleResult();
    }
}
